Учебный курс: Подготовка на 1С:Специалист по платформе 1С:Предприятие 8.3

Задачи оперативного учета – тема № 5:
Пример реализации учета номенклатуры в различных единицах измерения

Ранее для нашей задачи мы уже разработали учетную схему, пояснили некоторые нюансы решения, а также создали все необходимые объекты конфигурации. В данном разделе завершим разработку нашей конфигурации и протестируем ее на конкретном примере.

Создание общих алгоритмов

Чтобы общая функция получения коэффициента пересчета была доступна для вызова из модулей форм документов, возможны два варианта ее размещения:

  • В модуле менеджера справочника «Единицы измерения»
  • В общем модуле.

Эти два варианта практически равноценны, можно использовать любой из них. Для общих модулей имеется больше настроек, чем для модулей менеджеров. В частности, можно использовать возможность кэширования возвращаемых значений функций. (Это означает, что при повторном вызове функции будет возвращено ранее вычисленное значение, без повторного обращения к данным). Коэффициент пересчета единиц измерения считаем условно-постоянным, он изменяется достаточно редко, поэтому использование общего модуля с установленным свойством повторного использования возвращаемых значений будет несколько более оптимальным с точки зрения производительности.

Добавим общий модуль ОбщегоНазначенияПовИсп со следующими свойствами:

  • Сервер – Истина
    (т.к. потребуется обращение к таблицам базы данных)
  • Вызов сервера – Истина
    (т.к. функции этого модуля будут вызываться из клиентских модулей – модулей форм документов)
  • Повторное использование возвращаемых значений – На время сеанса
    (Заметим, что даже если это свойство установлено в значение «На время сеанса», время сохранения ранее вычисленных значений функций не превышает 20 минут с момента последнего к ним обращения. А для нашей задачи такая задержка обновления коэффициента пересчета некритична)

Свойства общего модуля ОбщегоНазначенияПовИсп

Рисунок 1 – Свойства общего модуля ОбщегоНазначенияПовИсп

В общем модуле напишем экспортную функцию ПолучитьКоэффициент:

Функция ПолучитьКоэффициент(ЕдиницаИзмерения) Экспорт Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | ЕдиницыИзмерения.Коэффициент |ИЗ | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения |ГДЕ | ЕдиницыИзмерения.Ссылка = &ЕдиницаИзмерения |"; Запрос.УстановитьПараметр("ЕдиницаИзмерения", ЕдиницаИзмерения); РезультатЗапроса = Запрос.Выполнить(); // 1. Проверка результата запроса на пустоту Если РезультатЗапроса.Пустой() Тогда Возврат 0; КонецЕсли; // 2. Открытие выборки и получение данных Данные = РезультатЗапроса.Выбрать(); Данные.Следующий(); Возврат Данные.Коэффициент; КонецФункции

Обратим внимание, что всегда желательно делать проверку результата запроса на пустоту (п. 1):

Если РезультатЗапроса.Пустой() Тогда

перед открытием выборки (п. 2):

Данные = РезультатЗапроса.Выбрать();

Дело в том, что на открытие выборки система всегда тратит некоторые ресурсы, и если запрос пуст, то эти траты окажутся напрасными.

Заметим также, почему в данном случае предпочтительнее использовать именно запрос. Казалось бы, данная функция могла быть гораздо проще:

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии закрыты